/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.invoice.controller;

import com.invoice.busines.VendedorBO;
import com.invoice.busines.VendedorBOImpl;
import com.invoice.busines.dto.VendedorCampoDTO;
import com.invoice.busines.dto.VendedorDTO;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author Lenin
 */
@ManagedBean
@ViewScoped
public class VendedorBean extends BeanGenerico implements Serializable{
    Logger logger=Logger.getLogger(VendedorBean.class.getName());
    private VendedorBO vendedorBO;
    private boolean habEdicion;
    private boolean habNuevo;
    private boolean habBusqueda;
    private static int INACTIVO=0;
    private static int ACTIVO=1;
    private List<VendedorCampoDTO> labels = new ArrayList<VendedorCampoDTO>();
    private VendedorDTO vendedorDTO=new VendedorDTO();
    
    @Override
    protected void init() {
     try{
        vendedorBO=new VendedorBOImpl();
        habEdicion=false;
        habNuevo=true;
        habBusqueda=true;
    } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        
    }
    public VendedorDTO getVendedorDTO() {
        return vendedorDTO;
    }

    public void setVendedorDTO(VendedorDTO vendedorDTO) {
        this.vendedorDTO = vendedorDTO;
    }

    public boolean isHabEdicion() {
        return habEdicion;
    }

    public void setHabEdicion(boolean habEdicion) {
        this.habEdicion = habEdicion;
    }

    public boolean isHabNuevo() {
        return habNuevo;
    }

    public void setHabNuevo(boolean habNuevo) {
        this.habNuevo = habNuevo;
    }

    public boolean isHabBusqueda() {
        return habBusqueda;
    }

    public void setHabBusqueda(boolean habBusqueda) {
        this.habBusqueda = habBusqueda;
    }
    public List<VendedorCampoDTO> getLabels() {
        return labels;
    }
    public void saveVendedor(){
        if(labels != null){
            vendedorDTO.setVendedorCampoDTOs(labels);
        }
        try {
            if (habNuevo) {
                vendedorBO.addVendedor(vendedorDTO);
                msg.setDetail(null);
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Vendedor", "Vendedor Agregado ");
            } else {
                vendedorBO.updateVendedor(vendedorDTO);
                msg.setDetail(null);
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Vendedor", "Vendedor Actualizado");
            }
            habEdicion=false;
            habBusqueda=false;
            dispMessage();
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
            msg=new FacesMessage(FacesMessage.SEVERITY_ERROR,"Error en agregar vendedor",ex.getMessage());
            dispMessage();
        }
    }
    
     public String addVendedor(){
        habEdicion = true;
        vendedorDTO = new VendedorDTO();
        labels = new ArrayList<VendedorCampoDTO>();
        return "RegistroVendedor";
    }
    public void deleteVendedor(){
        try {
            vendedorDTO.setActivo(VendedorBean.INACTIVO);
            vendedorBO.updateVendedor(vendedorDTO);
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
    }
    
    public void findVendedor(){
        try {
            String numeroDoc=vendedorDTO.getDni();
            vendedorDTO=vendedorBO.findVendedor(vendedorDTO.getDni());
            if(vendedorDTO!=null){
                vendedorDTO.setEstadoModificacion(true);
                msg=new FacesMessage(FacesMessage.SEVERITY_INFO, "Vendedor hallado", "Vendedor");
                habEdicion=false;
                habBusqueda=false;
                habNuevo=false;
                labels = vendedorDTO.getVendedorCampoDTOs();
                if(labels == null){
                    labels = new ArrayList<VendedorCampoDTO>();
                }
            }else{                
                vendedorDTO=new VendedorDTO();
                vendedorDTO.setDni(numeroDoc);
                vendedorDTO.setEstadoModificacion(false);
                msg=new FacesMessage(FacesMessage.SEVERITY_INFO, "Vendedor", "Vendedor no hallado\nIngrese datos de un nuevo vendedor");
                habEdicion=true;
                habBusqueda=false;
                habNuevo=true;
                labels = new ArrayList<VendedorCampoDTO>();
            }
            
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
            msg=new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), "Vendedor");
        }finally{
            dispMessage();
        }
    }
    public void cancelFound(){
        vendedorDTO=new VendedorDTO();
        habEdicion=false;
        habBusqueda=true;
        habNuevo=false;
    }
    public void habilitarEdicion(){
        habEdicion=true;
        habBusqueda=false;
    }
    public String cancelar(){
        //habEdicion = true;
        vendedorDTO = new VendedorDTO();
        return "ListaVendedor";
    }
    public void addVendedorCampo() {
        VendedorCampoDTO vendedorCampoDTO = new VendedorCampoDTO();
        labels.add(vendedorCampoDTO);       
    }
    
    public List<VendedorDTO> listVendedor(){
        List<VendedorDTO> list = new ArrayList<VendedorDTO>();
        try{
            list = vendedorBO.findClienteAll();
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return list;
    }
    public List<VendedorDTO> completeVendedor(String query) {
        query = query.toLowerCase();
        List<VendedorDTO> filteredThemes = new ArrayList<VendedorDTO>();
        try {
            List<VendedorDTO> allThemes = vendedorBO.findClienteAll();
            for (VendedorDTO skin : allThemes) {
                if(skin.getNombre().toLowerCase().startsWith(query)) {
                    filteredThemes.add(skin);
                }
            }
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return filteredThemes;
    }
    
}
